package com.itheima.reggie.controller;

import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {

    //图片保存的基本目录
    @Value("${reggie.path}")
    private String baseImagePath;

    @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {
        log.info("[文件上传，文件原名：{}]",file.getOriginalFilename());
        log.info("[文件上传，文件保存路径：{}]",baseImagePath);
        //对上传文件重命名
        int dotLastIndexOf = file.getOriginalFilename().lastIndexOf(".");
        String suffix = file.getOriginalFilename().substring(dotLastIndexOf);
        //把上传文件保存到文件上传的路径中
       // String fileName = file.getOriginalFilename();
        //  UUID.randomUUID()就是产生一个很长的随机字符串，保证名称不重复
        String fileName = UUID.randomUUID().toString()+suffix;
        log.info("fileName:{}",fileName);
        File savePathFile = new File(baseImagePath);
        // 判断一下文件保存的基本路径是否存在，如果不存在了，我们就构建一下
        if (!savePathFile.exists()){
            savePathFile.mkdirs();
        }
        try {
            file.transferTo(new File(savePathFile,fileName));
        }catch (IOException e){
            e.printStackTrace();
        }
        return R.success(fileName);
    }

    //文件下载
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response) {

        //找到文件保存的路径
        File savePathFile = new File(baseImagePath);
        try {
            // 1.根据前端提供的文件名，去文件保存的路径，去构建一个文件输入流
            // 把文件到到了内存中
            FileInputStream fileInputStream = new FileInputStream(new File(savePathFile, name));
            // 2.使用response的输出流，outputStream写回到客户端的浏览器
            ServletOutputStream outputStream = response.getOutputStream();
            // 设置输出的类型,image/jgeg,这个必须这样写
            response.setContentType("image/jpeg");
            //使用工具类，完成文件输出
            IOUtils.copy(fileInputStream,outputStream);
            //关闭文件流，千万不能关闭outputstream
            fileInputStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
